package main

import (
	"context"
	"os"
	"os/signal"
	"syscall"
	"time"
	"web01/conf"
	"web01/dao"
	"web01/logger"
	"web01/router"
)

func init() {
	conf.InitFlag()
	conf.InitBackgroundStart()
	conf.InitConfig()
	logger.InitLogger(conf.LogFile, "info", conf.LogRotate)
	dao.InitMysql()
}

// 监听系统退出信号
func waitSignal() {
	// 创建监听系统退出信号的 chan
	quit := make(chan os.Signal, 1)
	// 监听指定信号 ctrl+c kill QUIT
	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
	// 阻塞并监听系统信号
	sig := <-quit
	logger.Printf("Receive a signal: %s", sig.String())

	// 5秒内优雅关闭服务（将未处理完的请求处理完再关闭服务），超过5秒就超时退出
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	router.Shutdown(ctx)

	logger.Println("Server exiting")
	os.Exit(0)
}

func main() {
	router.Start()
	waitSignal()
}
